www.gusucode.com > 基于matlab的GUI界面的语音信号端点标定源码程序 > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图/vblast-ofdm simulation/launchsim.m

    

function launchsim(SimulationParameters)

% set constants used in simulation
LoadSimConsts(SimulationParameters);

global SimulationConstants;
% Set Random number generators initial state
% reset random number generators based on current clock value
rand('state',sum(100*clock));
randn('state',sum(100*clock));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Main simulation loop
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Initialize simulation timer
start_time = clock;

% Initialize trellis tables for Viterbi decoding
rx_init_viterbi;

% counters for information bits
num_inf_bits          = 0;
num_inf_bit_errors    = 0;
num_inf_packet_errors = 0;
inf_ber               = 0;
inf_per               = 0;


% counters for raw (uncoded) bits
num_raw_bits          = 0;
num_raw_bit_errors    = 0;
num_raw_packet_errors = 0;
raw_ber               = 0;
raw_per               = 0;

% Simulation the number of packets specified 

packet_count = 0;
SNR=SimulationParameters.SNR;
SNR_axis=[];
PER_raw_axis=[];
BER_raw_axis=[];
PER_inf_axis=[];
BER_inf_axis=[];


h=waitbar(0,'Percentage Completed');
set(h,'Position',[280 80 270 56.25]);
set(h,'name','Please wait...');
wb=6.25;
temp=[];


for idx=1:16
while packet_count < SimulationParameters.SimulationPackets
  packet_count = packet_count + 1;
  SNR=SimulationParameters.SNR(idx);
   packet_start_time  = clock;
   % Simulate one packet with the current options
   [inf_bit_cnt, inf_bit_errors,raw_bits_cnt, raw_bit_errors] = ...
      single_packet(SimulationParameters,SNR);
   num_inf_bits          = num_inf_bits + inf_bit_cnt;
   num_inf_bit_errors    = num_inf_bit_errors + inf_bit_errors;
   num_inf_packet_errors = num_inf_packet_errors + (inf_bit_errors~=0);
   inf_ber               = num_inf_bit_errors/num_inf_bits;
   inf_per               = num_inf_packet_errors/packet_count;
   

   num_raw_bits          = num_raw_bits + raw_bits_cnt;
   num_raw_bit_errors    = num_raw_bit_errors + raw_bit_errors;
   num_raw_packet_errors = num_raw_packet_errors + (raw_bit_errors~=0);
   raw_ber               = num_raw_bit_errors/num_raw_bits;
   raw_per               = num_raw_packet_errors/packet_count;
                     
   packet_stop_time = clock;
   packet_duration = etime(packet_stop_time, packet_start_time);
                  
      drawnow;
      
   end
packet_count=0;
BER_raw=raw_ber;
PER_raw=raw_per;
BER_inf=inf_ber;
PER_inf=inf_per;
% counters for information bits
num_inf_bits          = 0;
num_inf_bit_errors    = 0;
num_inf_packet_errors = 0;
inf_ber               = 0;
inf_per               = 0;

% counters for raw (uncoded) bits
num_raw_bits          = 0;
num_raw_bit_errors    = 0;
num_raw_packet_errors = 0;
raw_ber               = 0;
raw_per               = 0;

SNR_axis=[SNR_axis SNR];
BER_raw_axis=[BER_raw_axis BER_raw];
BER_inf_axis=[BER_inf_axis BER_inf];
PER_raw_axis=[PER_raw_axis PER_raw];
PER_inf_axis=[PER_inf_axis PER_inf];

str_bar=[num2str(wb) '% Completed'];
waitbar(wb/100,h,str_bar);
wb=wb+6.25;

end
close(h);

if SimulationParameters.VBLAST~=1
    
str1='Space-Time Coding ';
if SimulationParameters.TxDiv==0
    temp1=1;
else
    temp1=SimulationParameters.TxDiv;
end
if SimulationParameters.RxDiv==0
    temp2=1;
else
    temp2=SimulationParameters.RxDiv;
end
    
figure;
semilogy(SNR_axis,BER_inf_axis,'r'); 
hold;
semilogy(SNR_axis,PER_inf_axis,'b');
axis([0 30 1e-6 1]);
grid;
xlabel('SNR [dB]');
ylabel('BER/PER');
legend('BER','PER');
str2=[str1  '(' num2str(temp1) 'x' num2str(temp2) ') '];
str3=[num2str(SimulationParameters.FFTPoints) ' Point OFDM System (With Convolution Coding)'];
str4=[str2 str3];
str5=SimulationParameters.ModulationType;
str6=sum(SimulationConstants.NumDataSubc);
str7=SimulationParameters.ConvCodeRate;
str9=['Conv Code Rate:' str7];
str8=['Modulation:' str5 'Number of Data Carriers:' num2str(str6) ' Conv Code Rate:' str7] 
title(str8);
set(gcf,'NumberTitle','off');
set(gcf,'Name',str4);

    
figure;
semilogy(SNR_axis,BER_raw_axis,'r');
hold;
semilogy(SNR_axis,PER_raw_axis,'b');
axis([0 30 1e-6 1]);
grid;
xlabel('SNR [dB]');
ylabel('BER/PER');
legend('BER','PER');
str2=[str1  '(' num2str(temp1) 'x' num2str(temp2) ') '];
str3=[num2str(SimulationParameters.FFTPoints) ' Point OFDM System (Without Convolution Coding)'];
str4=[str2 str3];
str5=SimulationParameters.ModulationType;
str6=sum(SimulationConstants.NumDataSubc);
str7=['Modulation: ' str5 '  Number of Data Carriers: ' num2str(str6)];
title(str7);
set(gcf,'NumberTitle','off');
set(gcf,'Name',str4);



else
figure;
semilogy(SNR_axis,BER_raw_axis,'r');
hold;
semilogy(SNR_axis,PER_raw_axis,'b');
axis([0 30 1e-6 1]);
grid;
str1='V-BLAST Coding ';
str2=[str1  '(' num2str(SimulationParameters.M) 'x' num2str(SimulationParameters.N) ') '];
str3=[num2str(SimulationParameters.FFTPoints) ' Point OFDM System'];
str4=[str2 str3];
str5=SimulationParameters.ModulationType;
str6=sum(SimulationConstants.NumDataSubc);
str7=['Modulation: ' str5 '  Number of Data Carriers: ' num2str(str6)];

xlabel('SNR [dB]');
ylabel('BER/PER');
legend('BER','PER');
title(str7);
set(gcf,'NumberTitle','off');
set(gcf,'Name',str4);
end
str1=cd;
str2=SimulationParameters.FileName;
str3=[str1 '\' str2];

if SimulationParameters.Savefile==1
    save(str3);
end

stop_time = clock;
elapsed_time = etime(stop_time,start_time);

fprintf('Simulation duration: %g seconds\n',elapsed_time);